package daw.agenda.dao.jdbc;

import daw.agenda.dao.ContactoDAO;
import daw.agenda.transferObjects.Contacto;
import daw.agenda.transferObjects.ContactoImpl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;


public class ContactoDAOOracle implements ContactoDAO{
    private static java.sql.Connection conexion;
    
    public ContactoDAOOracle() {
        conexion = Conexion.getInstance().getConexion();
    }


    public ResultSet find(String nombre, String direccion, String telefono, String cp, String provincia) {
        ResultSet rs = null;
        if(conexion != null){
            try{
                StringBuffer sql = new StringBuffer();
                boolean insertarAND = false;
                int indice = 1;
                sql.append("SELECT NOMBRE, TELEFONO, DIRECCION, CP, PROVINCIA FROM CONTACTOSOGT ");
               if(nombre != null && !nombre.equals("")){
                    sql.append("WHERE NOMBRE LIKE ? ");
                    insertarAND = true;
                }
                if(direccion != null && !direccion.equals("")){
                    sql.append(insertarAND?"AND":"WHERE");
                    sql.append(" DIRECCION LIKE ? ");
                    insertarAND = true;
                }
                if(telefono != null && !telefono.equals("")){
                    sql.append(insertarAND?"AND":"WHERE");
                    sql.append(" TELEFONO LIKE ? ");
                    insertarAND = true;
                }
                if(cp != null && !cp.equals("")){
                    sql.append(insertarAND?"AND":"WHERE");
                    sql.append(" CP LIKE ? ");
                    insertarAND = true;
                }
                if(provincia != null && !provincia.equals("")){
                    sql.append(insertarAND?"AND":"WHERE");
                    sql.append(" PROVINCIA LIKE ?");
                }
                System.out.println("Ejecutando sentencia SQL: "+sql.toString());
                PreparedStatement ps = conexion.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                if(nombre != null && !nombre.equals(""))
                ps.setString(indice++, "%"+nombre+"%");
                if(direccion != null && !direccion.equals(""))
                ps.setString(indice++, "%"+direccion+"%");
                if(telefono != null && !telefono.equals(""))
                ps.setString(indice++, "%"+telefono+"%");
                if(cp != null && !cp.equals(""))
                ps.setString(indice++, "%"+cp+"%");
                if(provincia != null && !provincia.equals(""))
                ps.setString(indice, "%"+provincia+"%");
                rs = ps.executeQuery();
            } catch(SQLException sqlEx){
                System.out.println("Error al consultar contacto: "+sqlEx);
            }
        }
        return rs;
    }

    public int insertar(Contacto c) {
    int resultado = -1;
        if(conexion != null){
            try{
                String sql = "INSERT INTO CONTACTOSOGT (NOMBRE, TELEFONO, DIRECCION, CP, PROVINCIA) VALUES (?,?,?,?,?)";
                PreparedStatement ps = conexion.prepareStatement(sql);
                ps.setString(1, c.getNombre());
                ps.setString(2, c.getTelefono());
                ps.setString(3, c.getDireccion());
                ps.setString(4, c.getCodigoPostal());
                ps.setString(5, c.getProvincia());
                resultado = ps.executeUpdate(); 
            } catch(SQLException sqlEx){
                System.out.println("Error al insertar contacto: "+sqlEx);
            }
        }
        return resultado;
    }

    public List findAll() {
        List listaContactos = new ArrayList();
        if(conexion != null){
            try{
                String sql = "SELECT NOMBRE, TELEFONO, DIRECCION, CP, PROVINCIA FROM CONTACTOSOGT";
                PreparedStatement ps = conexion.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                while(rs.next()){
                    Contacto c = new ContactoImpl(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5));
                    listaContactos.add(c);
                }
            } catch(SQLException sqlEx){
                System.out.println("Error al consultar lista de contactos: "+sqlEx);
            }
        }
        return listaContactos;
    }
}
